#include "../src/diccTrie.h"

#include <iostream>
#include "../aed2/aed2.h"
#include "test.h"
using namespace std;

void testTrieVacio(ostream& os) {

    DiccTrie<int> d;
	
    String clave = "test";
    String clave2 = "hola eñe";
    
    assert(! d.Definido(clave));
    assert(! d.Definido(clave2));
}

void testDefinido(ostream& os) {

    DiccTrie<int> d;

    String clave = "test";
    String clave2 = "hola eñe";
    String clave3 = "noestoy";
    
    d.Definir(clave, 1);
    d.Definir(clave2, 2);
    
    assert(d.Definido(clave));
    assert(d.Definido(clave2));
    assert(! d.Definido(clave3));
}


void testObtener(ostream& os) {

    DiccTrie<int> d;
	
    String clave = "test";
    String clave2 = "hola";
    String clave3 = "noestoy";
    
    d.Definir(clave, 1);
    d.Definir(clave2, 2);
    d.Definir(clave3, 123);
    
    assert(d.Obtener(clave) == 1);
    assert(d.Obtener(clave2) == 2);
    assert(d.Obtener(clave3) == 123);
    
    //si la clave ya estaba definida, debe reemplazar su significado
    d.Definir(clave3, 124);
    assert(d.Obtener(clave3) == 124);
}

int main(void) {

    Tester::Instance()->NuevoSet("Test DiccTrie");
    Tester::Instance()->UsarSet("Test DiccTrie");
    
    Tester::Instance()->Declarar("testTrieVacio", &testTrieVacio);
    Tester::Instance()->Declarar("testDefinido", &testDefinido);
    Tester::Instance()->Declarar("testObtener", &testObtener);
    
    Tester::Instance()->setVerborragia(2);
    Tester::Instance()->Ejecutar("Test DiccTrie");
	
    return 0;
}
